using UnityEngine;
using System.Collections.Generic;

public class DebugAnimatorEvents : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        // 获取当前GameObject的Animator组件
        animator = GetComponent<Animator>();
        
        if (animator == null)
        {
            Debug.LogError("DebugAnimatorEvents: 未找到Animator组件！");
            return;
        }
        
        Debug.Log("DebugAnimatorEvents: 开始检查动画事件...");
        
        // 获取所有动画剪辑
        RuntimeAnimatorController controller = animator.runtimeAnimatorController;
        if (controller == null)
        {
            Debug.LogError("DebugAnimatorEvents: Animator没有指定Controller！");
            return;
        }
        
        AnimationClip[] clips = controller.animationClips;
        Debug.Log("DebugAnimatorEvents: 找到 " + clips.Length + " 个动画剪辑");
        
        // 检查每个动画剪辑中的事件
        for (int i = 0; i < clips.Length; i++)
        {
            AnimationEvent[] events = clips[i].events;
            
            if (events.Length > 0)
            {
                Debug.Log("\nDebugAnimatorEvents: 动画剪辑 '" + clips[i].name + "' 包含 " + events.Length + " 个事件:");
                
                for (int j = 0; j < events.Length; j++)
                {
                    AnimationEvent ev = events[j];
                    
                    // 检查是否有未指定函数名称的事件
                    if (string.IsNullOrEmpty(ev.functionName))
                    {
                        Debug.LogError("DebugAnimatorEvents: 找到未指定函数名称的动画事件！\n" +
                                      "- 动画剪辑: " + clips[i].name + "\n" +
                                      "- 事件时间: " + ev.time + "秒\n" +
                                      "- 请在Unity编辑器中双击该动画剪辑，打开Animation窗口，删除或修复此事件。");
                    }
                    else
                    {
                        Debug.Log("- 事件 " + (j + 1) + ": 函数名='" + ev.functionName + "', 时间=" + ev.time + "秒");
                    }
                }
            }
        }
        
        Debug.Log("\nDebugAnimatorEvents: 检查完成。\n" +
                  "如果未找到问题，请按照以下步骤操作:\n" +
                  "1. 在Unity编辑器中选择玩家角色GameObject\n" +
                  "2. 在Inspector面板中找到Animator组件\n" +
                  "3. 双击Animator Controller打开Animator窗口\n" +
                  "4. 选择任意动画状态\n" +
                  "5. 在Inspector面板中检查Animation Clips\n" +
                  "6. 双击动画剪辑打开Animation窗口\n" +
                  "7. 查看Events轨道，删除或修复未指定函数名称的事件");
    }

    // 可以添加一个示例函数供动画事件调用
    public void AnimationEventCallback()
    {
        Debug.Log("AnimationEventCallback: 动画事件被触发！");
    }
}